package com.tm.d16_polymorphism;

/**
 * 2024/5/19 认识对象多态 Cjj 13：59
 */
public class Test {
    public static void main(String[] args) {
        //目标：理解多态的好处
        //好处1：可以实现解耦合, 右边对象可以随时切换,后续业务随机改变
        People p1=new Student();
        p1.run();
        //p1.test(); //多态下存在问题：无法直接调用子类的独有功能。

       //强制类型转型
        Student s1=(Student)p1;
        s1.test();

        //强制类型转换可能存在的问题,编译阶段有继续或者实现关系就可以强制转换,但是
        //运行时可能出现类型转换异常
        //Teacher t=(Teacher)p1;

        System.out.println("-------------------");
        Student s = new Student();
        go(s);

        Teacher t = new Teacher();
        go(t);

        if(p1 instanceof Student){
            Student s2=(Student) p1;
            s2.test();
        }else {
            Teacher t2=(Teacher) p1;
            t2.teach();
        }
    }


    //好处2：可以使用父类类型的变量作为形参, 可以接收一切子类对象。
    public static void go(People p){
        p.run();
        if(p instanceof Student){
            Student s=(Student) p;
            s.test();
        }else if(p instanceof Teacher){
            Teacher t=(Teacher) p;
            t.teach();
        }
    }
    }

